package com.jiangxjsy.admin.service;

import com.alibaba.fastjson.JSONObject;
import com.jiangxjsy.core.page.BasePage;
import com.jiangxjsy.model.admin.bo.AdminUserBO;
import com.jiangxjsy.model.admin.entity.AdminUser;
import com.jiangxjsy.model.admin.vo.AdminSuperUserVO;
import com.jiangxjsy.model.admin.vo.AdminUserVO;
import com.jiangxjsy.model.admin.vo.DeptUserListVO;
import com.jiangxjsy.model.authorization.bo.AdminUserStatusBO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * wukong-crm-master
 * 蒋胜宇
 * 2025/6/6 19:26
 */

public interface AdminUserService {
    /**
     * 根据用户名查询用户信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    List<Map<String,Object>> findByUsername(String username);

    /**
     * 根据用户 id 查询用户角色 id 列表
     *
     * @param userId 用户 id
     * @return 角色 id 列表
     */
    List<Integer> queryUserRoleIds(Long userId);

    /**
     * 设置用户状态
     *
     * @param adminUserStatusBO 用户状态
     */
    void setUserStatus(AdminUserStatusBO adminUserStatusBO);

    /**
     * 激活用户
     *
     * @param adminUserStatusBO 用户状态
     */
    void activateUser(AdminUserStatusBO adminUserStatusBO);

    /**
     * 查询系统状态
     *
     * @return 系统状态
     */
    Integer querySystemStatus();

    /**
     * 根据用户 ID 查询用户信息
     *
     * @param userId 用户 ID
     * @return 用户信息
     */
    AdminUser queryByUserId(Long userId);

    /**
     * 查询登录用户信息
     *
     * @param request 请求
     * @param response 响应
     * @return 登录用户信息
     */
    AdminSuperUserVO queryLoginUser(HttpServletRequest request, HttpServletResponse response);

    /**
     * 查询企业下所有用户
     * @param adminUserBO 业务对象，查询参数
     * @return 用户列表分页对象
     */
    BasePage<AdminUserVO> queryUserList(AdminUserBO adminUserBO);

    /**
     * 查询用户数量
     *
     * @return 用户数量
     */
    JSONObject countUserByLabel();

    /**
     * 查询部门下所有用户
     *
     * @param deptId 部门 id
     * @param isAllUser 是否查询所有用户
     * @return 部门的用户列表
     */
    DeptUserListVO queryDeptUserList(Integer deptId, boolean isAllUser);

    /**
     * 添加用户
     *
     * @param adminUserVO 用户信息
     * @param request 请求
     * @param response 响应
     */
    void addUser(AdminUserVO adminUserVO, HttpServletRequest request, HttpServletResponse response);
}
